#!/bin/bash

# 彻底清除 macOS 所有网络接口的代理设置和 Docker 代理配置
# 支持 Wi-Fi、Ethernet、Thunderbolt、USB 网卡等
# 同时清理 Docker 客户端代理配置，防止构建时使用代理

echo "🔍 正在获取所有网络服务..."

# 获取所有网络服务（跳过带 * 的已禁用服务）
network_services=$(networksetup -listallnetworkservices | grep -v "^\*")

if [ -z "$network_services" ]; then
    echo "❌ 未找到任何启用的网络服务。"
    exit 1
fi

echo "🧹 将对以下网络服务清除代理设置："
echo "$network_services"
echo "----------------------------------------"

while IFS= read -r service; do
    if [ -n "$service" ]; then
        echo "⚙️  正在清理: $service"
        
        # 清除 HTTP 代理
        networksetup -setwebproxy "$service" "" 0 off 2>/dev/null
        networksetup -setwebproxystate "$service" off 2>/dev/null
        
        # 清除 HTTPS (Secure Web) 代理
        networksetup -setsecurewebproxy "$service" "" 0 off 2>/dev/null
        networksetup -setsecurewebproxystate "$service" off 2>/dev/null
        
        # 清除 SOCKS 代理
        networksetup -setsocksfirewallproxy "$service" "" 0 off 2>/dev/null
        networksetup -setsocksfirewallproxystate "$service" off 2>/dev/null
        
        # 可选：清除 FTP 代理（较少用，但一并清理）
        networksetup -setftpproxy "$service" "" 0 off 2>/dev/null
        networksetup -setftpproxystate "$service" off 2>/dev/null
        
        # 可选：清除 Gopher 代理（几乎不用）
        networksetup -setgopherproxy "$service" "" 0 off 2>/dev/null
        networksetup -setgopherproxystate "$service" off 2>/dev/null
    fi
done <<< "$network_services"

echo "✅ 所有网络服务的代理设置已彻底清除！"

# 清理 Docker 代理配置
echo ""
echo "🐳 正在检查并清理 Docker 代理配置..."

DOCKER_CONFIG_DIR="$HOME/.docker"
DOCKER_CONFIG_FILE="$DOCKER_CONFIG_DIR/config.json"
DOCKER_CONFIG_BACKUP="$DOCKER_CONFIG_DIR/config.json.backup"

# 检查 Docker 配置目录是否存在
if [ -d "$DOCKER_CONFIG_DIR" ] && [ -f "$DOCKER_CONFIG_FILE" ]; then
    echo "📁 找到 Docker 配置文件: $DOCKER_CONFIG_FILE"
    
    # 检查是否包含代理配置
    if grep -q '"proxies"' "$DOCKER_CONFIG_FILE"; then
        echo "⚠️  检测到 Docker 代理配置，正在清理..."
        
        # 备份原始配置文件
        if [ ! -f "$DOCKER_CONFIG_BACKUP" ]; then
            cp "$DOCKER_CONFIG_FILE" "$DOCKER_CONFIG_BACKUP"
            echo "📦 已创建备份: $DOCKER_CONFIG_BACKUP"
        fi
        
        # 使用 jq 移除代理配置（如果 jq 可用）
        if command -v jq &> /dev/null; then
            jq 'del(.proxies)' "$DOCKER_CONFIG_FILE" > "$DOCKER_CONFIG_FILE.tmp" && \
            mv "$DOCKER_CONFIG_FILE.tmp" "$DOCKER_CONFIG_FILE"
            echo "✅ 使用 jq 成功移除 Docker 代理配置"
        else
            # 如果没有 jq，使用 sed 进行简单清理
            echo "ℹ️  jq 命令未找到，使用 sed 进行基本清理"
            sed -i.bak '/"proxies"\|httpProxy\|httpsProxy\|noProxy/d' "$DOCKER_CONFIG_FILE"
            # 清理可能产生的多余逗号
            sed -i.bak ':a;N;$!ba;s/,\s*\n\s*}/\n    }/g' "$DOCKER_CONFIG_FILE"
            sed -i.bak ':a;N;$!ba;s/,\s*\n\s*]/\n  ]/g' "$DOCKER_CONFIG_FILE"
        fi
        
        echo "✅ Docker 代理配置已清理"
    else
        echo "✅ Docker 配置文件中未发现代理配置"
    fi
else
    echo "ℹ️  Docker 配置文件不存在或未找到，跳过 Docker 代理清理"
fi

# 清理 Docker 环境变量（可选）
echo ""
echo "🧹 清理 Docker 相关的环境变量..."
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY

echo ""
echo "🎉 所有代理配置清理完成！"
echo ""

# 验证当前 Wi-Fi（或第一个服务）的代理状态（可选）
echo "📋 示例：当前 Wi-Fi 的 HTTP 代理状态："
networksetup -getwebproxy "Wi-Fi" 2>/dev/null || echo "（Wi-Fi 服务不存在或已禁用）"

# 验证 Docker 配置状态
echo ""
echo "📋 Docker 配置状态："
if [ -f "$DOCKER_CONFIG_FILE" ]; then
    if grep -q '"proxies"' "$DOCKER_CONFIG_FILE"; then
        echo "❌ Docker 配置中仍存在代理设置"
    else
        echo "✅ Docker 配置中无代理设置"
    fi
else
    echo "ℹ️  Docker 配置文件不存在"
fi